package com.nkzy.controller;

import cn.hutool.core.bean.BeanUtil;
import com.nkzy.domain.dto.UserFormDTO;
import com.nkzy.domain.pojo.Result;
import com.nkzy.domain.pojo.User;
import com.nkzy.domain.vo.UserVO;
import com.nkzy.service.UserService;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Collections;
import java.util.List;

@RequestMapping("/users")  //Restful风格要求请示路径用表名+s
@RestController
@CrossOrigin  // 后端解决跨域问题
public class UserController {
    //Controller是前后端数据交互的桥梁，对于后端开发人员说：给前端开发人员提供接口说明文档
    @Autowired
    private UserService userService;
    //保存数据
    @PostMapping
    @Operation(summary = "保存用户信息")
    public Result saveUser(@RequestBody UserFormDTO userFormDTO){
        //1.把DTO转换为POJO对象
        User user=BeanUtil.copyProperties(userFormDTO,User.class);
        //2.调用业务层的保存的方法，完成增加用户信息
        userService.save(user);
        return Result.success();
    }
    //查询一个用户：Get
    @GetMapping("/{id}") //RestFul格式的传参
    @Operation(summary = "查询一个用户")
    public Result getUser(@PathVariable Long id){
        //1.调用业务层查询一个用户
        User user=userService.getById(id);
        //2.把POJO对象转换为VO对象
        UserVO userVO=BeanUtil.copyProperties(user,UserVO.class);
        //3.返回VO对象
        return Result.success(userVO);
    }

    //删除一个用户
    @DeleteMapping("/{id}")
    @Operation(summary = "删除一个用户")
    public Result deleteUser(@PathVariable Long id){
        //1.调用业务层删除一个用户
        userService.removeById(id);
        return Result.success();
    }
    //根据id的集合查询多个用户
    @GetMapping
    @Operation(summary = "根据id的集合查询多个用户")
    public Result getUsers(@RequestParam("ids") List<Long> ids){
        //1.调用业务层查询多个用户
        List<User> users=userService.listByIds(ids);
        //2.把POJO对象转换为VO对象
         List<UserVO> usersVO=BeanUtil.copyToList(users,UserVO.class);
         return Result.success(usersVO);
    }
    //查询所有用户
    @GetMapping("/all")
    @Operation(summary = "查询所有用户")
    public Result getAllUsers(){
        //1.调用业务层查询所有用户
        List<User> users=userService.list();
        //2.把POJO对象转换为VO对象
        List<UserVO> usersVO=BeanUtil.copyToList(users,UserVO.class);
        return Result.success(usersVO);
    }
    //修改一个用户
    @PutMapping
    @Operation(summary = "修改一个用户")
    public Result updateUser(@RequestBody UserFormDTO userFormDTO){
        //1.把DTO转换为POJO对象
        User user=BeanUtil.copyProperties(userFormDTO,User.class);
        //2.调用业务层修改一个用户
        userService.updateById(user);
        return Result.success();
    }
}
